package com.foreveross.mofang.datapersistence.infra;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.hadoop.hbase.filter.FilterList;

/**
 * 一句话描述
 * 
 * @author fb
 */
public interface IHbaseRepository {

	/**
	 * 创建hbase表与族
	 * 
	 * @param tableName
	 *            表名
	 * @param familys
	 *            族集合
	 */
	void createTable(String tableName, List<String> familys) throws Exception;

	/**
	 * hbase数据添加，qualifier, family与map的key相同。数据如果某列为一个集合，而要把集合转换成平级数据
	 * 
	 * @param tableName	表名
	 * @param rowData 数据行（为处理过的map数据）
	 * @param rowKey hbase的rowId
	 * @throws IOException
	 */
	void addRecord(String tableName, String rowKey, Map<String, Object> rowData) throws IOException;
	
	/**
	 * hbase批量数据添加，qualifier, family与map的key相同。数据如果某列为一个集合，而要把集合转换成平级数据
	 * 
	 * @param tableName	表名
	 * @param rowDatas  key为rowKey, value为处理过的map数据
	 * @throws IOException
	 */
	void batchAddRecord(String tableName, Map<String,Map<String, Object>> rowDatas) throws IOException;

	/**
	 * 删除一行记录
	 */
	void delOneRecord(String tableName, String rowKey) throws Exception;

	/**
	 * 删除多行记录
	 * 
	 * @param tableName
	 * @param rowKeys
	 * @throws Exception
	 */
	void delMultRecord(String tableName, String... rowKeys) throws Exception;

	/**
	 *  查找一行记录
	 *  
	 * @param tableName
	 * @param rowKey
	 * @return Map&lt;String, String&gt;
	 * @throws Exception
	 */
	Map<String, Object> getRecord(String tableName, String rowKey) throws Exception;

	/**
	 * 查询多行记录
	 * 
	 * @throws Exception
	 */
	List<Map<String, Object>> queryRecords(String tableName, FilterList filterList) throws Exception;

}